Variables et Mariadb Challenge
Challenge :
- Installer manuellement un nouveau container avec LXC nommé « mysql ».
- Ajouter le dans le fichier d’inventaire de votre dépôt Ansible.
- Déployer une recette qui installe un serveur MySQL.
- Créer un fichier
mysql
dansetc/host_vars/
qui contient une variable avec un mot de passe, par exemplemysql_password
. - Déployer un compte utilisateur
bob
avec des droits sur toutes les bases de données en utilisant le modulemysql_user
. - Déployer une base de données
eponges
en utilisant le module Ansible approprié. - Modifier l’utilisateur
bob
pour qu’il ne puisse accéder qu’à la base de donnéeseponges
.
Solution :
-
Nous avons créé un nouveau container nommé
mysql
avec LXC, puis nous avons assuré l'accès via SSH et avons modifié le fichieretc/hosts
.vim etc/hosts_vars/mysql
mysql_password: "12345" -
Création du fichier
ansible/playbooks/mysql.yml
:---
- name: deploy mysql
hosts: mysql
remote_user: root
roles:
- mysql -
Modification du fichier
ansible/playbooks/roles/mysql/tasks/main.yml
:- name: Install Mysql
ansible.builtin.apt:
state: present
update_cache: yes
pkg:
- mysql-server
- python3-pymysql
- percona-toolkit
- name: Create a new database with name 'eponges'
community.mysql.mysql_db:
name: eponges
state: present
login_unix_socket: /run/mysqld/mysqld.sock
- name: Create user 'bob' with all database privileges
mysql_user:
name: bob
password: "{{ mysql_password }}"
priv: '*.*:ALL,GRANT'
state: present
login_unix_socket: /run/mysqld/mysqld.sock -
Fichier
.github/workflows/tp.yml
:name: Deploy Ansible Project
on:
push:
branches:
- master
workflow_dispatch:
jobs:
build:
runs-on: self-hosted
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: copy ansible files to right place
run: |
mkdir -p /home/student/ansible
rsync -av --delete -P ansible/* /home/student/ansible
- name: Deploy Ansible Project
working-directory: /home/student/challenge-s08-e01-bis-sameddemet/ansible
run: |
ansible-playbook playbooks/mysql.yml -
Après les modifications, le
git push
a créé une base de données nomméeeponges
et un utilisateur nommébob
avec des droits sur toutes les bases de données. -
Modification de l'utilisateur
bob
pour qu'il n'ait accès qu'à la base de donnéeseponges
: Modifier la lignepriv:
dans le fichieransible/playbooks/roles/mysql/tasks/main.yml
comme suit :priv: 'eponges.*:ALL,GRANT'
-
Utilisation de boucles avec Ansible Loops pour créer plusieurs utilisateurs :
- name: Modify user bob so that he can only access the eponges database
mysql_user:
name: "{{ item }}"
password: "{{ mysql_password }}"
priv: 'eponges.*:ALL,GRANT'
state: present
login_unix_socket: /run/mysqld/mysqld.sock
loop:
- bob
- toto
- tata
- titiDans
…tasks/main.yml
, la partieloop
devrait ressembler à ceci :- name: Modify user bob so that he can only access the eponges database
mysql_user:
name: "{{ item.name }}"
password: "{{ item.password }}"
priv: 'eponges.*:ALL,GRANT'
state: "{{ item.state }}"
login_unix_socket: /run/mysqld/mysqld.sock
loop: "{{ user_list }}"
Modification des utilisateurs avec des mots de passe différents et suppression de certains utilisateurs :
Afin d'assurer que chaque utilisateur a un mot de passe différent et de gérer la suppression de certains utilisateurs, nous avons effectué les étapes suivantes :
Fichier ansible/host_vars/mysql
:
user_list:
- name: bob
password: "HBvp64I5OQaFHyjhjESRBwuly"
state: present
- name: toto
password: "QOHAAlSMpdjbFCGGikX5MfuQ9"
state: present
- name: tata
password: "xnETh7KY4yuBdPY4qqUaGSntZ"
state: present
- name: titi
password: "jj41FtubOgbR8FwBRPaFM1nYA"
state: absent
Fichier ansible/playbooks/roles/mysql/tasks/main.yml
:
- name: Création des utilisateurs avec accès à la base de données eponges
mysql_user:
name: "{{ item.name }}"
password: "{{ item.password }}"
priv: 'eponges.*:ALL,GRANT'
state: "{{ item.state }}"
login_unix_socket: /run/mysqld/mysqld.sock
loop: "{{ user_list }}"
Ainsi, le challenge Ansible Mariadb a été résolu avec succès en suivant ces étapes. Vous pouvez personnaliser selon vos besoins.